package com.miplus.ccrm.admin.service.impl;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.base.MPJBaseServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.miplus.ccrm.admin.controller.vo.*;
import com.miplus.ccrm.admin.pojo.SysAuditLog;
import com.miplus.ccrm.admin.pojo.SysPrlink;
import com.miplus.ccrm.admin.pojo.SysRole;
import com.miplus.ccrm.admin.pojo.SysTags;
import com.miplus.ccrm.admin.service.SysTagsService;
import com.miplus.ccrm.admin.mapper.SysTagsMapper;
import com.miplus.ccrm.common.CmdResVo;
import com.miplus.ccrm.common.JPubUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;

/**
* @author pc
* @description 针对表【sys_tags】的数据库操作Service实现
* @createDate 2024-03-07 13:37:37
*/
@Service
public class SysTagsServiceImpl extends MPJBaseServiceImpl<SysTagsMapper, SysTags>
    implements SysTagsService{

    @Override
    public  IPage<TagsInfoResVo> tagsList(TagsInfoReqVo paras)
    {
        return selectJoinListPage(new Page<>(paras.getPageNum(), paras.getPageSize()),
                TagsInfoResVo.class,
                new MPJLambdaWrapper<SysTags>()
                        .selectAs("(select count(1) from con_customertag ctg where ctg.id=t.id)",TagsInfoResVo::getCustcount)
                        .selectAll(SysTags.class)
                        .eq(JPubUtils.IsNotEmpty(paras.getTid()),"tid",paras.getTid())
                        .eq(JPubUtils.IsNotEmpty(paras.getStatus()),"available",paras.getStatus())
                        .like(JPubUtils.IsNotEmpty(paras.getDsc()),"dsc",paras.getDsc())
                        .orderByAsc(SysTags::getTid,SysTags::getRank)
        );
    }

    @Override
    public  CmdResVo updateTag(TagsEditReqVo paras)
    {
        SysTags tags=new SysTags();
        //BeanUtils.copyProperties(paras,tags);
        tags.setId(paras.getId());
        tags.setName(paras.getName());
        tags.setTid(paras.getTid());
        tags.setTdsc(paras.getTdsc());
        tags.setStatus(paras.getStatus());
        tags.setParentid(paras.getParentid());
        tags.setColor(paras.getColor());
        //tagssetRank(paras.getRank());

        int ret=baseMapper.update(tags,new QueryWrapper<SysTags>()
                .eq("tid",paras.getTid())
                .eq("id",paras.getId())
        );

        //for tdsql DBBASE,2027-07-22
        ret=baseMapper.updateRank(
                paras.getTid(),paras.getId(),paras.getRank()
        );

        return new CmdResVo(ret);
    }

    @Override
    public CmdResVo updateTagStatus(UpTiDStatusReqVo paras)
    {
        SysTags tags=new SysTags();
        tags.setTid(paras.getTid());
        tags.setId(paras.getId());
        tags.setStatus(paras.getStatus());
        int ret=baseMapper.update(tags,new QueryWrapper<SysTags>()
                .eq("tid",paras.getTid())
                .eq("id",paras.getId())
        );

        return new CmdResVo(ret);
    }

    @Override
    public CmdResVo insertTag(TagsEditReqVo paras)
    {
        SysTags tags=new SysTags();
        //BeanUtils.copyProperties(paras,tags);
        tags.setId(paras.getId());
        tags.setName(paras.getName());
        tags.setTid(paras.getTid());
        tags.setTdsc(paras.getTdsc());
        tags.setStatus(paras.getStatus());
        tags.setParentid(paras.getParentid());
        tags.setColor(paras.getColor());
        //tagssetRank(paras.getRank());

        int ret=baseMapper.insert(tags);

        //for tdsql DBBASE,2027-07-22
        ret=baseMapper.updateRank(
                paras.getTid(),paras.getId(),paras.getRank()
        );

        return new CmdResVo(ret);
    }

    @Override
    public CmdResVo deleteTag(String id)
    {
        int ret=baseMapper.delete(new QueryWrapper<SysTags>()
                .eq("id",id)
        );
        return new CmdResVo(ret);
    }

    @Override
    public List<TagsResVo> tagsTypeSelect()
    {
        return baseMapper.tagsTypeSelect();
    }

    @Override
    public List<TagsTypeResVo> tagsType()
    {
        return baseMapper.tagsType();
    }

    @Override
    public List<TagsTreeResVo> tagsTree(String hasSys)
    {
        List<TagsTreeResVo> tree=new LinkedList<>();
        List<TagsTypeResVo> ll=baseMapper.tagsType();
        for(TagsTypeResVo p : ll){
            if(!JPubUtils.IsEqual(p.getId(),"SYS")||JPubUtils.IsEqual(hasSys,"1")) {
                TagsTreeResVo t = new TagsTreeResVo();
                t.setId(p.getId());
                t.setName(p.getName());
                t.setChildren(baseMapper.tagsNameList(p.getId()));
                tree.add(t);
            }
        }

        return tree;
    }

    @Override
    public List<TagsResVo> tagsSelect()
    {
        return selectJoinList(
                TagsResVo.class,
                new MPJLambdaWrapper<SysTags>()
                        .selectAs("id",TagsResVo::getValue)
                        .selectAs("dsc",TagsResVo::getLabel)
                        .selectAs("color",TagsResVo::getColor)
                        .select("id","dsc")
                        .eq("AVAILABLE","1")
                        .orderByAsc(SysTags::getRank)
        );
    }
}




